package ch.epfl.lara.pm.ast;


  
abstract class Formula
  
case class And(left: Formula, right: Formula) extends Formula 
  
case class Or(left: Formula, right: Formula) extends Formula 
  
// This is used only internally (feed to formDecider expression A --> B)
case class Imply(left: Formula, right: Formula) extends Formula 

case class Neg(f: Formula) extends Formula 
  
abstract class Atom extends Formula 

case class SubsetEq(left: Term, right: Term) extends Atom 


/** Internally used */
case class In(x: String, set: Term) extends Atom 

abstract class Term extends Atom
  
case class Union(left: Term, right: Term) extends Term 
  
case class Intersection(left: Term, right: Term) extends Term 
  
abstract class Element extends Term

case class Set(name: String) extends Element 

case object EmptySet extends Element 
  
case object BTrue extends Element 
  
case object BFalse extends Element 